package model

import org.joda.time.DateTime
import scala.beans.BeanProperty
import scala.collection.mutable.MutableList
import scala.Option

class Empleado(nombre: String, legajo: Int, disponibilidades: MutableList[Disponibilidad]) {

  /**
   *   Al final lanzamos las excepciones que dice el tp en la parte "Validaciones"
   *   por ejemplo que no puede trabajar menos de 4 horas
   */

  val excepciones: MutableList[DateTime] = MutableList()
  val restricciones: MutableList[DateTime] = MutableList()

  def puedeIr(fecha: DateTime, desde: Int, hasta: Int): Boolean = {
    return (noTieneRestriccion(fecha) &&
             (tieneDisponibilidad(fecha, desde, hasta) || tieneExcepcion(fecha))
           )
  }

  def noTieneRestriccion(d: DateTime): Boolean = {
    return !restricciones.exists(_.getDayOfYear().equals(d.getDayOfYear()))
  }

  def tieneDisponibilidad(fecha: DateTime, desde: Int, hasta: Int): Boolean = {
    disponibilidades.find(p => p.getDia.equals(fecha.getDayOfWeek())) match {
      case None => false
      case d: Some[Disponibilidad] => {
        val disp = d.get
        return (disp.getDesde >= desde && disp.getHasta <= hasta)
      }
    }

    /**
     * poner excepciones:
     * si desde > hasta
     * (no se me ocurren mas excepciones)
     */
  }

  def tieneExcepcion(fecha: DateTime): Boolean = {
    return excepciones.contains(fecha)
  }

  def agregarDisponibilidad(disp: Disponibilidad) {
    disponibilidades += disp
  }

  def agregarRestriccion(fecha: DateTime) {
    restricciones += fecha
  }

  def agregarExcepcion(fecha: DateTime) {
    restricciones += fecha
  }

  def quitarDisponibilidad(disp: Disponibilidad) {
    disponibilidades.filter(_.equals(disp))
  }

  def quitarRestriccion(fecha: Disponibilidad) {
    disponibilidades.filter(_.equals(fecha))
  }

  def quitarExcepcion(fecha: Disponibilidad) {
    disponibilidades.filter(_.equals(fecha))
  }
}